//
//  WBUserAccount.swift
//  WinsonWeibo
//
//  Created by Administrator on 2017/4/19.
//  Copyright © 2017年 Winson. All rights reserved.
//

import UIKit


private let fileName: NSString = "useraccount.json"


class WBUserAccount: NSObject {

    /// 用户授权的唯一票据，用于调用微博的开放接口，
    /// 同时也是第三方应用验证微博用户登录的唯一票据，
    /// 第三方应用应该用该票据和自己应用内的用户建立唯一影射关系，来识别登录状态，
    /// 不能使用本返回值里的UID字段来做登录识别。
    var access_token: String? // = "2.00S6JxUFXsHP5B06e23740e50uyvEX"

    /// access_token的生命周期，单位是秒数。
    var expires_in: TimeInterval = 0 {

        didSet {
            expiresDate = Date.init(timeIntervalSinceNow: expires_in)
        }
    }

    var expiresDate: Date?

    /// screen_name
    var screen_name: String?

    /// 用户头像地址（大图），180×180像素
    var avatar_large: String?


    /// 授权用户的UID，本字段只是为了方便开发者，
    /// 减少一次user/show接口调用而返回的，
    /// 第三方应用不能用此字段作为用户登录状态的识别，
    /// 只有access_token才是用户授权的唯一票据。
    var uid: String?

    /// 重写init方法
    override init() {
        super.init()
        // 1. 从磁盘中取出json file
        // 获取path
        // 2. 转换成字典
        guard let path = fileName.cz_appendDocumentDir(),
            let data = NSData(contentsOfFile: path),
            let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String: Any] else {
                return
        }
        // 3. 设置属性
        /** 用户是否登录的关键代码 **/
        yy_modelSet(with: dict ?? [:])

        // 测试token过期
        // expiresDate = Date(timeIntervalSinceNow: -3600 * 24)
        // print(expiresDate)

        // 4. 处理账户token过期
        if expiresDate?.compare(Date()) != ComparisonResult.orderedDescending  {
            print("账户已过期")
            // 1. 清除token 与uid
            access_token = nil
            uid = nil
            // 2. 清空保存的文件
            try? FileManager.default.removeItem(atPath: path)
        }


    }
    /// 重写description 计算性属性
    override var description: String {

        return yy_modelDescription()
    }

    func saveUserAccount() {

        // 1. 先转成字典
        let dict = yy_modelToJSONObject() ?? [:]

        // 3. 在转成data
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []),
            let path = fileName.cz_appendDocumentDir()
            else {
                return
        }
        print(path)

        // 写入沙盒
        (data as NSData).write(toFile: path, atomically: true)
    }
}
